#pragma once

#include "stdafx.h"
#include <vector>

using namespace std;

class EVInject
{
public:
    EVInject();
    ~EVInject();

public:
    static BOOL InjectDll(DWORD dwPid, LPCTSTR szDllPath);
    static BOOL UnInjectDll(DWORD dwPid, LPCTSTR szDllPath);    
    static BOOL APCInjectDll(DWORD dwPid, const wstring& wstrDllPath);
    static BOOL APCUnInjectDll(DWORD dwPid, const wstring& wstrDllPath);
    static BOOL APCInjectDllInMainThread(DWORD dwPid, const wstring& wstrDllPath);
    static BOOL APCUnInjectDllInMainThread(DWORD dwPid, const wstring& wstrDllPath);
    static BOOL FindProcessThreadIds(DWORD dwPid, std::vector<DWORD>& tids);
	static BOOL InjectDllByPI(const LPPROCESS_INFORMATION ppi, const wstring& sDllPath, bool bSuspend);
	static BOOL InjectDllByPid(DWORD dwPid, const wstring& sDllPath);
	static BOOL UnjectDllByPid(DWORD dwPid, const wstring& sDllPath);
	static BOOL UnjectDllByPI(const LPPROCESS_INFORMATION ppi, const wstring& sDllPath);
	static BOOL RunCallByPid(const LPPROCESS_INFORMATION ppi, DWORD dwCallAddr, PBYTE pParams, DWORD dwParamSize, bool bSuspend);

};


